package com.pubsys.main.shared.model;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;

import com.pubsys.main.shared.model.Referencia.ABRANG;
import com.pubsys.main.shared.model.Referencia.TYPE_COMP_RES;
import com.pubsys.main.shared.model.Referencia.TYPE_RESUMO;

public class Monografia implements Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 2526015081756398340L;
	private String titulo;
	private ArrayList<Autor> autores;
	private int ano;
	private String local;
	private String edicao;
	private String editora;
//	private ArrayList<Autor> tradutorRevisor;
	private String nroPag;
	private String nroVol;
	private String serie;
	private String codigo;
//	private String paginaDisp;
	private Date dataPub;
//	private Date dataAcesso;
	
	private ABRANG abrangencia;
	private TYPE_COMP_RES tipoCR;
	private TYPE_RESUMO tipoResumo;
	
	public static enum TYPE_MONOGRAFIA {PROCEEDING, COLLENTION, BOOK};
	private TYPE_MONOGRAFIA tipoMonografia;
	
	public Monografia(){
		
	}

	public Monografia(String _titulo, ArrayList<Autor> _autores, int _ano, String _local, String _edicao,
						String _editora, String _nropag, String _nrovol, String _serie,
						String _codigo, Date _dataPub, 
						TYPE_MONOGRAFIA _tipo , ABRANG _abrang, TYPE_COMP_RES _tipoCR, TYPE_RESUMO _tipoRes){
		// String _paginaDisp, Date _dataAcesso , ArrayList<Autor> _tradutorRevisor
		//TODO Auto-generated constructor stub
		this.setTitulo(_titulo);
		this.setAutores(_autores);
		this.setAno(_ano);
		this.setLocal(_local);
		
		this.setEdicao(_edicao);
		this.setEditora(_editora);
//		this.setTradutorRevisor(_tradutorRevisor);
		this.setNroPag(_nropag);
		this.setNroVol(_nrovol);
		this.setSerie(_serie);
		this.setCodigo(_codigo);
		this.setDataPub(_dataPub);
//		this.setPaginaDisp(_paginaDisp);
//		this.setDataAcesso(_dataAcesso);
		
		
		this.setTipoMonografia(_tipo);
		this.setAbrangencia(_abrang);
		this.setTipoCR(_tipoCR);
		this.setTipoResumo(_tipoRes);
		
//		if(_tipo == TYPE_MONOGRAFIA.PROCEEDING) super.setTipo(Referencia.TYPE.PROCEEDING);
//		else if(_tipo == TYPE_MONOGRAFIA.COLLENTION) super.setTipo(Referencia.TYPE.COLLENTION);
//		else super.setTipo(Referencia.TYPE.BOOK);
		
//		super.setAbrangencia(_abrang);
//		super.setTipoCompRes(_tipoCR);
//		super.setTipoResumo(_tipoRes);
		
	}


	public void setTitulo(String titulo) {
		this.titulo = titulo;
	}

	public String getTitulo() {
		return titulo;
	}

	public void setAutores(ArrayList<Autor> autores) {
		this.autores = autores;
	}

	public ArrayList<Autor> getAutores() {
		return autores;
	}

	public void setAno(int ano) {
		this.ano = ano;
	}

	public int getAno() {
		return ano;
	}

	public void setLocal(String local) {
		this.local = local;
	}

	public String getLocal() {
		return local;
	}

	public void setEdicao(String edicao) {
		this.edicao = edicao;
	}
	
	public String getEdicao() {
		return edicao;
	}

	public String getEditora() {
		return editora;
	}

	public void setEditora(String editora) {
		this.editora = editora;
	}
	
	public String getFormatoABNT(){
		StringBuilder ref = new StringBuilder();
		
		ref.append(this.montaParteAutor());
		ref.append(this.montaParteTitulo());
		ref.append(this.montaParteEdicao());
		ref.append(this.montaParteLocal());
		ref.append(this.montaParteEditora());
		ref.append(this.montaParteAno());
		ref.append(this.montaParteNroPaginas());
		ref.append(this.montaParteSerie());
		ref.append(this.montaParteVolume());
		
		return ref.toString();
	}
	
	private String montaParteAutor(){
		StringBuilder nomes = new StringBuilder();
		boolean ehPrimeiro = true;
		for(Autor autor : autores ){
			if(ehPrimeiro){
				ehPrimeiro = false;
			}
			else{
				nomes.append("; ");
			}
			nomes.append(this.pegaNome(autor.getNome()));
			
		}
		nomes.append(". ");
		return nomes.toString();
	}
	
	private String pegaNome(String nome){
		String partes[] = nome.split(" ");
		int length = partes.length;
		
		StringBuilder novoFormato = new StringBuilder();
		novoFormato.append(partes[length -1].toUpperCase());
		
		while(length > 1){
			length = length -1;
			novoFormato.append(", ");
			novoFormato.append(partes[length -1].toUpperCase().charAt(0));
			novoFormato.append(".");
		}
		return novoFormato.toString();
	}

	private String montaParteTitulo(){
		StringBuilder strTitulo = new StringBuilder();
		strTitulo.append(this.getTitulo());
		strTitulo.append(". ");
		
		return strTitulo.toString();
	}
	
	private String montaParteEdicao(){
		StringBuilder strEd = new StringBuilder();
		strEd.append(this.getEdicao());
		strEd.append(".ed. ");
		
		return strEd.toString();
	}
	
	private String montaParteLocal(){
		StringBuilder strLocal = new StringBuilder();
		strLocal.append(this.getLocal());
		strLocal.append(": ");
		
		return strLocal.toString();
	}
	
	private String montaParteEditora(){
		StringBuilder strEditora = new StringBuilder();
		strEditora.append(this.getEditora());
		strEditora.append(", ");
		
		return strEditora.toString();
	}
	
	private String montaParteAno(){
		StringBuilder strAno = new StringBuilder();
		strAno.append(this.getAno());
		strAno.append(".");
		
		return strAno.toString();
	}
	
	private String montaParteNroPaginas(){
		if(this.getNroPag()== null) 
			return "";
		
		StringBuilder strNroPag = new StringBuilder(" ");
		
		strNroPag.append(this.getNroPag());
		strNroPag.append(" p.");
		
		return strNroPag.toString();
	}
	
	private String montaParteSerie(){
		if(this.getSerie()== null) 
			return "";
		
		StringBuilder strSerie = new StringBuilder(" (");
		
		strSerie.append(this.getSerie());
		
		return strSerie.toString();
	}
	
	private String montaParteVolume(){
		if(this.getNroVol()== null) 
			if(this.getSerie()==null)
				return "";
			else return ").";
		
		StringBuilder strVolume = new StringBuilder(", n.");
		
		strVolume.append(this.getSerie());
		strVolume.append(").");
		
		return strVolume.toString();
	}
	
	
	public void setNroPag(String nroPag) {
		this.nroPag = nroPag;
	}

	public String getNroPag() {
		return nroPag;
	}

	public void setNroVol(String nroVol) {
		this.nroVol = nroVol;
	}

	public String getNroVol() {
		return nroVol;
	}

//	public void setTradutorRevisor(ArrayList<Autor> tradutorRevisor) {
//	}
//
//	public ArrayList<Autor> getTradutorRevisor() {
//		return tradutorRevisor;
//	}
	
	public void setSerie(String serie) {
		this.serie = serie;
	}

	public String getSerie() {
		return serie;
	}


	public void setTipoMonografia(TYPE_MONOGRAFIA tipoMonografia) {
		this.tipoMonografia = tipoMonografia;
	}

	public TYPE_MONOGRAFIA getTipoMonografia() {
		return tipoMonografia;
	}


	public void setCodigo(String codigo) {
		this.codigo = codigo;
	}


	public String getCodigo() {
		return codigo;
	}


//	public void setPaginaDisp(String paginaDisp) {
//		this.paginaDisp = paginaDisp;
//	}
//
//
//	public String getPaginaDisp() {
//		return paginaDisp;
//	}


	public void setDataPub(Date dataPub) {
		this.dataPub = dataPub;
	}


	public Date getDataPub() {
		return dataPub;
	}


//	public void setDataAcesso(Date dataAcesso) {
//		this.dataAcesso = dataAcesso;
//	}
//
//
//	public Date getDataAcesso() {
//		return dataAcesso;
//	}


	public void setAbrangencia(ABRANG abrangencia) {
		this.abrangencia = abrangencia;
	}


	public ABRANG getAbrangencia() {
		return abrangencia;
	}


	public void setTipoCR(TYPE_COMP_RES tipoCR) {
		this.tipoCR = tipoCR;
	}


	public TYPE_COMP_RES getTipoCR() {
		return tipoCR;
	}


	public void setTipoResumo(TYPE_RESUMO tipoResumo) {
		this.tipoResumo = tipoResumo;
	}


	public TYPE_RESUMO getTipoResumo() {
		return tipoResumo;
	}

}
